package com.kh.rationaldrugreview.dto;

import com.kh.rationaldrugreview.enums.RiskLevel;
import com.kh.rationaldrugreview.enums.RiskFactor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

import java.util.List;
import java.util.Map;

/**
 * 风险项
 * Individual Risk Item
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RiskItem {
    
    /**
     * 风险ID
     */
    private String riskId;
    
    /**
     * 风险因子
     */
    private RiskFactor riskFactor;
    
    /**
     * 风险等级
     */
    private RiskLevel riskLevel;
    
    /**
     * 风险标题
     */
    private String title;
    
    /**
     * 风险描述
     */
    private String description;
    
    /**
     * 详细信息
     */
    private String details;
    
    /**
     * 涉及的药物
     */
    private List<String> affectedDrugs;
    
    /**
     * 相互作用的药物（如果是药物相互作用）
     */
    private String interactingDrug;
    
    /**
     * 风险分值
     */
    private Integer score;
    
    /**
     * 临床建议
     */
    private String recommendation;
    
    /**
     * 处理措施
     */
    private List<String> actions;
    
    /**
     * 替代方案
     */
    private List<String> alternatives;
    
    /**
     * 监测参数
     */
    private List<String> monitoringParameters;
    
    /**
     * 剂量调整建议
     */
    private String dosageAdjustment;
    
    /**
     * 严重程度标记
     */
    private String severity;
    
    /**
     * 机制说明
     */
    private String mechanism;
    
    /**
     * 证据等级
     */
    private String evidenceLevel;
    
    /**
     * 频率
     */
    private String frequency;
    
    /**
     * 额外属性
     */
    private Map<String, Object> additionalProperties;
    
    /**
     * 是否可以覆盖
     */
    private Boolean overrideable;
    
    /**
     * 覆盖原因选项
     */
    private List<String> overrideReasons;
    
    /**
     * 创建时间戳
     */
    private Long timestamp;
    
    /**
     * 数据源
     */
    private String source;
    
    /**
     * 获取风险颜色（用于前端显示）
     */
    public String getRiskColor() {
        return riskLevel != null ? riskLevel.getColor() : "#6c757d";
    }
    
    /**
     * 获取中文风险等级
     */
    public String getRiskLevelName() {
        return riskLevel != null ? riskLevel.getChineseName() : "未知";
    }
    
    /**
     * 判断是否为高风险
     */
    public boolean isHighRisk() {
        return riskLevel != null && riskLevel.isHighRisk();
    }
    
    /**
     * 判断是否需要立即处理
     */
    public boolean requiresImmediateAction() {
        return riskLevel == RiskLevel.CRITICAL;
    }
    
    /**
     * 生成风险摘要
     */
    public String generateSummary() {
        StringBuilder summary = new StringBuilder();
        summary.append(getRiskLevelName()).append("：");
        
        if (affectedDrugs != null && !affectedDrugs.isEmpty()) {
            summary.append(String.join("、", affectedDrugs));
            if (interactingDrug != null) {
                summary.append(" 与 ").append(interactingDrug);
            }
        }
        
        if (title != null) {
            summary.append(" - ").append(title);
        }
        
        return summary.toString();
    }
}